package Array;

public class SpiralMatrix {
    public static void main(String[] args) {
        int n=5;
        SpiralMatrix sm = new SpiralMatrix();
        int[][] res=sm.generateMatrix(n);
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                System.out.printf("%3d ",res[i][j]);//制定宽度为3位，不足则补空格
            }
            System.out.println(); // 换行
        }

    }

    public int[][] generateMatrix(int n) {
        int count=1;
        int[][] nums=new int[n][n];
        int startX=0,startY=0;
        int i,j;
        int loop=1;//用来控制循环，看循环几圈
        int offset=1;//边界，每次填充都不能达到边界，交给下一次填充开始
        while(loop<=n/2){

            for(j=startY;j<n-offset;j++){
                nums[startX][j]=count++;
            }
            for(i=startX;i<n-offset;i++){
                nums[i][j]=count++;
            }
            for(;j>startY;j--){
                nums[i][j]=count++;
            }
            for(;i>startX;i--){
                nums[i][j]=count++;
            }
            startX++;
            startY++;
            loop++;
            offset++;
        }
        //奇数的矩阵直接填充中间的那个数字，偶数的矩阵不需要填充
        if(n%2==1){
            nums[n/2][n/2]=n*n;
        }
        return nums;
    }
}
